package com.xjh.basestudy.designmode.createMode.createMode5_Builder;

/**
 * @author XuJianHua
 * @date 2022-09-23 16:26:11
 * @description 工程总监 监督施工方工作
 * *
 * *工程总监的角色就像电影制作中的导演一样，他从宏观上管理项目并指导整个施工队的建造流程。
 * * 在代码第13行的指导方法中，我们依次调用施工方的打地基方法buildBasement()、建造墙体方法buildWall()及建筑物封顶方法buildRoof()，
 * * 保证了建筑物自下而上的建造工序。可以看到，施工方是在第9行由外部注入的，所以工程总监并不关心是哪个施工方来造房子，更不关心施工方有什么样的建造工艺，
 * * 但他能保证对施工工序的绝对把控，也就是说，工程总监只控制施工流程。
 */
public class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    public void setBuilder(Builder builder) {
        this.builder = builder;
    }

    public Building direct() {
        System.out.println("=====工程项目启动=====");
        // 第一步，打好地基
        builder.buildBasement();
        // 第二步，建造框架、墙体
        builder.buildWall();
        // 第三步，封顶
        builder.buildRoof();
        System.out.println("=====工程项目竣工=====");
        return builder.getBuilding();
    }

}